package com.jimmyapp.papa.game.model;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;

import javax.microedition.khronos.opengles.GL10;

import android.graphics.Color;

public class Box {

	
	private static final int one = 0x10000;
	private static final int[] REDA = {0,0x100,0,one,
		one,0,0,one,
		one,0,0,one,
		0x600,0,0,one,
		one,0,0,one,
		one,0,0,one,
		0x800,0,0,one,
		one,0,0,one}; 
	private static final int[] BLUA = {0,0x100,0,one,
		0,one,0,one,
		0,one,0,one,
		0,0x600,0,one,
		0,one,0,one,
		0,one,0,one,
		0,0x800,0,one,
		0,one,0,one};
	private static final int[] GREA = {0,0,0,one,
		0,0,one,one,
		0,0,one,one,
		0,0,0x600,one,
		0,0,one,one,
		0,0,one,one,
		0,0,0x800,one,
		0,0,one,one};
	
	public Box() {
		double a = Math.random();
		double r = 1.0 / 3;
		double b = 2.0 / 3;
		
		if (a < r) {
			this.color = Color.RED;
			ByteBuffer cbb = ByteBuffer.allocateDirect(REDA.length * 4);
			cbb.order(ByteOrder.nativeOrder());
			mColorBuffer = cbb.asIntBuffer();
			mColorBuffer.put(REDA);
			mColorBuffer.position(0);
			
		} else if (a < b) {
			this.color = Color.BLUE;
			ByteBuffer cbb = ByteBuffer.allocateDirect(GREA.length * 4);
			cbb.order(ByteOrder.nativeOrder());
			mColorBuffer = cbb.asIntBuffer();
			mColorBuffer.put(GREA);
			mColorBuffer.position(0);
			
		} else {
			this.color = Color.GREEN;
			ByteBuffer cbb = ByteBuffer.allocateDirect(BLUA.length * 4);
			cbb.order(ByteOrder.nativeOrder());
			mColorBuffer = cbb.asIntBuffer();
			mColorBuffer.put(BLUA);
			mColorBuffer.position(0);
			
		}
		
		
		
		int vertices[] = { -one, -one, -one, one, -one, -one, one, one, -one,
				-one, one, -one, -one, -one, one, one, -one, one, one, one,
				one, -one, one, one, };
		
		

		byte indices[] = { 0, 4, 5, 0, 5, 1, 1, 5, 6, 1, 6, 2, 2, 6, 7, 2, 7,
				3, 3, 7, 4, 3, 4, 0, 4, 7, 6, 4, 6, 5, 3, 0, 1, 3, 1, 2 };

		// Buffers to be passed to gl*Pointer() functions
		// must be direct, i.e., they must be placed on the
		// native heap where the garbage collector cannot
		// move them.
		//
		// Buffers with multi-byte datatypes (e.g., short, int, float)
		// must have their byte order set to native order

		ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
		vbb.order(ByteOrder.nativeOrder());
		mVertexBuffer = vbb.asIntBuffer();
		mVertexBuffer.put(vertices);
		mVertexBuffer.position(0);

		

		mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
		mIndexBuffer.put(indices);
		mIndexBuffer.position(0);
	}

	public void draw(GL10 gl) {
		gl.glFrontFace(GL10.GL_CW);
		gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer);
		gl.glColorPointer(4, GL10.GL_FIXED, 0, mColorBuffer);
		gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE,
				mIndexBuffer);
	}
	
	public int color;
	private IntBuffer mVertexBuffer;
	private IntBuffer mColorBuffer;
	private ByteBuffer mIndexBuffer;
}
